The amount of data that is exchanged over data networks is rapidly increasing. Multiple clients are connected over a variety of network connections established over various communication networks to data servers. Each data server is operable to host multiple (client) network connections. In a typical scenario, multiple clients are coupled via multiple Wide Area Network (WAN) channels to a data server for exchanging information. In a typical client-server environment, a significant portion of the data server computational resources are allocated for managing the large number of network connections. Accordingly, a substantial portion of the available resources that could be used for managing data retrieval and associated processes is used to manage the open network connections. Usually, a CPU of a data server maintains an open network connection until the information exchange ends. The information exchange includes sending information portions or segments over the network connections. Accordingly, the amount of open network connections that may be maintained by a data server is relatively limited, and results in an inefficient usage of the computational resources of the data server.
As result, substantial CPU duplication is necessary in order to avoid a crash of the system due to an attempt of the server to handle more transactions than it can manage.
Attempts have been made in the art to deal with this problem but no satisfactory solution has been provided before the present invention. For instance, Smith et al., U.S. Pat. No. 6,308,238, describes an interface device, such as an adapter card, that off loads the server CPU from connection management tasks, and a method of operating it. The adapter card is operationally interposed between an origin server (more specifically the origin server bus) and between the network.
The memory (buffer) allocation and management of Smith is inefficient and is complex. For instance, the memory allocation scheme requires checking, during the step of writing data to buffer (such as an input buffer or an output buffer), whether the buffer is full and if so-allocating another buffer and linking these buffers. The implementation of this memory allocation scheme can be quite complicated, especially when it has to be done on-the-fly and when a large amount of buffers are involved in the process. Furthermore the data requests are provided to the data server “as is” and the origin server responses are stored “as is”. As the length of the request, and more especially the length of the response is not known a-priori, and as these length may vary within a wide range that spans from a few bytes to thousands and even millions of bytes, the memory allocation may result in an unexpected termination (due to shortage in available memory space), and is prone to additional problems, such as being unfair and being susceptible to head of the line blocking. For example, when handling a response that is very long, many other requests for receiving responses that turn out to be much shorter may starve.
Thus, solutions of the type proposed by Smith do not efficaciously solve the problems that are addressed by the present invention.
It is an object of the present invention to provide a method and apparatus that overcomes the drawbacks of the prior art.
It is another object of the invention to provide a method and an apparatus which efficiently exploit a relatively small number of continuously open connections, while allowing for the opening and closure of connections according to operational conditions.
It is a further object of the invention to provide a method and an apparatus, which efficiently manage data transfer between a plurality of clients and a server by managing the number of open connections according to the number of requests being submitted to the server.
It is yet another object of the invention to provide a method and an apparatus which efficiently manage data transfer between a plurality of clients and a server by limiting the amount of data that a server is allowed to forward to client in response to a Request, at any given time.
It is still another object of the invention to provide a method and an apparatus which solve the “head-of-line blocking” problem which is common to servers operated according to the prior art.